/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package wasolicitudesfiec.logicacontrol.SolicitarCambioCarrera;

import entidad.Parametro;
import entidad.Persona;
import entidad.cambioCarrera.Solicitudcambiocarrera;
import hero.interfaces.BnNodeValue;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import wasolicitudesfiec.CambioCarreraoEspecializacion.EvaluarSolicitudCambio;
import wasolicitudesfiec.general.MensajeException;
import wasolicitudesfiec.logicacontrol.CTRL_Base;

/**
 *
 * @author kabad
 */
public class CTRL_EvaluarSolicitudCambio extends CTRL_Base {

    private String nombreActividad = "Evaluar Solicitud";
    private EvaluarSolicitudCambio gui;

    public CTRL_EvaluarSolicitudCambio(EvaluarSolicitudCambio gui, FacesContext facesContext) {
        super(facesContext);
        this.gui = gui;
        String instancia;
        instancia = (String) externalContext.getRequestParameterMap().get("instancia");
        if (instancia != null) {
            externalContext.getSessionMap().put("instancia", instancia);
            System.out.println("CTRL_EvaluarSolicitudCambio Instancia init: " + instancia);
        }
    }

    public void inicializar() throws MensajeException {
        gui.getPanelNavegacion().getLblNavegacion().setText("Solicitud Cambio de Carrera/Especialización" + " -> " + nombreActividad);
        String nombreInstancia;
        Solicitudcambiocarrera solicitudCambio;
        Parametro carrera;
       try {
            if (prjSession == null) {
                throw new Exception();
            }
            nombreInstancia = getNombreInstanciaProceso();
            if (nombreInstancia == null) {
                throw new Exception();
            }
            prjSession.initProject(nombreInstancia);
            int idSolicitud = Integer.parseInt((String) prjSession.getProperty("idSolicitudProceso").getTheValue());
            solicitudCambio = logica.getLogCambioCarrera().leerSolicitudCambioNivel2(idSolicitud);
           gui.getDetalleDetalleSolicitarCambio().getLblCarreraActual().setText(solicitudCambio.getCarreraActual().getNombre());
            gui.getDetalleDetalleSolicitarCambio().getLblCarreraNueva().setText(solicitudCambio.getCarreraNueva().getNombre());            
          
            gui.getDetalleDetalleSolicitarCambio().getLblNombreEstudiante().setText(solicitudCambio.getEstudiante().getPersona().getNombres() + " " +
                    solicitudCambio.getEstudiante().getPersona().getApellidos());
            gui.getDetalleDetalleSolicitarCambio().getLblNumMatricula().setText(solicitudCambio.getEstudiante().getMatricula());

            gui.getDetalleDetalleSolicitarCambio().getTxtaComentariosEstudiante().setText(solicitudCambio.getObservacionEstudiante());

            Persona personaProfesor = solicitudCambio.getProfesor().getPersona();
            if (personaProfesor == null) {
                gui.getLblNombreCoordinador().setText("");
            } else {
                gui.getLblNombreCoordinador().setText(personaProfesor.getTituloAcademico() + " " + personaProfesor.getNombres() + " " + personaProfesor.getApellidos());
            }
            gui.getLblValorInforme().setText(solicitudCambio.getInforme());
            gui.getTxtComentarioCoordinador().setText(solicitudCambio.getObservacionCoordinador());
        } catch (Exception exception) {
            exception.printStackTrace();
             Logger.getLogger(CTRL_CoordinadorEmiteInforme.class.getName()).log(Level.SEVERE, null, exception);           
            throw new MensajeException("No es posible iniciar la solicitud. Por favor, intente luego de unos minutos.");
        }
    }

    public String getNombreInstanciaProceso() {
        String instancia;
        instancia = (String) externalContext.getSessionMap().get("instancia");
        return instancia;
    }
      public boolean aceptar() throws MensajeException {
	realizarActividad("Aprobado");
	return true;
    }
       public boolean rechazar() throws MensajeException {
        FacesMessage mensaje;
	if (gui.getTxtComentarioSubDecano().getText()==null) {
            mensaje = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Por favor ingrese su observación para esta solicitud", "");
	    facesContext.addMessage(gui.getTxtComentarioSubDecano().getClientId(facesContext), mensaje);
	    return false;
	}
	realizarActividad("NoAprobado");
	return true;
    }
       
     private void realizarActividad(String decision) throws MensajeException {
         String nombreInstancia;
        BnNodeValue actividad;
        Solicitudcambiocarrera solicitud;
        try {
            if (!(usrSession != null && prjSession != null)) {
                throw new Exception();
            }
            nombreInstancia = getNombreInstanciaProceso();
            prjSession.initProject(nombreInstancia);
            actividad = usrSession.getNode(nombreInstancia, nombreActividad);
            if (!(actividad != null &&
                    (actividad.getState() == hero.interfaces.Constants.Nd.READY ||
                    actividad.getState() == hero.interfaces.Constants.Nd.ANTICIPABLE))) {
                throw new Exception();
            }
            
            int idSolicitud = Integer.parseInt((String) prjSession.getProperty("idSolicitudProceso").getTheValue());
            solicitud = logica.getLogCambioCarrera().leerSolicitudCambioNivel2(idSolicitud);
           
            solicitud.setResultadoEvaluacion(decision);
            solicitud.setObservacionSubDecano((String)gui.getTxtComentarioSubDecano().getText());
            Vector<Persona> personas= logica.leerPersonaPorRol("SubDecano");
             solicitud.setFkIdSubDecano(personas.get(0).getIdPersona());
             solicitud = logica.getLogCambioCarrera().guardarYClonarSolicitudCambio(solicitud);
             Persona personaProfesor = solicitud.getProfesor().getPersona();
              prjSession.setProperty("coordinador",personaProfesor.getUsuario()); 
            prjSession.setNodeProperty(nombreActividad, "idSolicitudActividad", solicitud.getIdSolicitudCambioCarrera() + "");
            prjSession.setNodeProperty(nombreActividad, "DecisionEvaluacion", decision);
            usrSession.startActivity(nombreInstancia, nombreActividad);
            usrSession.terminateActivity(nombreInstancia, nombreActividad);
        } catch (MensajeException ex) {
            throw ex;
        } catch (Exception ex) { 
            ex.printStackTrace();
            Logger.getLogger(CTRL_CoordinadorEmiteInforme.class.getName()).log(Level.SEVERE, null, ex);       
            throw new MensajeException("No es posible guardar la solicitud. Por favor, intente luego de unos minutos.");
        }

     }
}
